/**
 1. 产生100个[1,6]之间的随机数，并统计每个数字出现的概率
 2. 可以创建2个数组分别保存随机数信息和统计产生次数信息
 3. 例如：随机数生成了10个1，20个2，30个3，5个4，10个5，25个6，对应的
 统计数组内容[10,20,30,5,10,25]，即统计数组的每一个位置上存放的是对应
 下标出现的次数
*/
import java.util.Random;

public class Test2 {
    public static void main(String[] args) {
        // 1. 创建两个数组
        int[] diceRolls = new int[100];  // 存储100次掷骰子结果
        int[] counts = new int[6];       // 统计每个数字出现的次数

        // 2. 初始化随机数生成器
        Random rand = new Random();

        // 3. 生成随机数并统计
        for (int i = 0; i < diceRolls.length; i++) {
            int roll = rand.nextInt(6) + 1;  // 生成1-6的随机数
            diceRolls[i] = roll;
            counts[roll - 1]++;  // 对应位置的计数加1
        }

        // 4. 打印原始数据
        System.out.println("100次掷骰子结果:");
        printArray(diceRolls, 20);  // 每行打印20个数字

        // 5. 打印统计结果
        System.out.println("\n各数字出现次数统计:");
        printStatistics(counts);

        // 6. 打印统计数组
        System.out.println("\n统计数组内容:");
        printArray(counts, counts.length);
    }

    // 打印数组，每行指定数量的元素
    private static void printArray(int[] arr, int perLine) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
            if ((i + 1) % perLine == 0) {
                System.out.println();
            }
        }
        if (arr.length % perLine != 0) {
            System.out.println();
        }
    }

    // 打印统计结果
    private static void printStatistics(int[] counts) {
        int total = 0;
        for (int count : counts) {
            total += count;
        }

        System.out.println("数字\t次数\t百分比");
        for (int i = 0; i < counts.length; i++) {
            double percentage = (counts[i] * 100.0) / total;
            System.out.printf("%d\t%d\t%.2f%%\n", i + 1, counts[i], percentage);
        }
    }
}